0 Prolog
↳1 UndefinedPredicateHandlerProof (⇒, 0 ms)
↳2 Prolog
↳3 PrologToPiTRSProof (⇒, 63 ms)
↳4 PiTRS
↳5 DependencyPairsProof (⇔, 63 ms)
↳6 PiDP
↳7 DependencyGraphProof (⇔, 0 ms)
↳8 AND
↳9 PiDP
↳10 UsableRulesProof (⇔, 0 ms)
↳11 PiDP
↳12 PiDPToQDPProof (⇒, 0 ms)
↳13 QDP
↳14 QDPSizeChangeProof (⇔, 0 ms)
↳15 YES
↳16 PiDP
↳17 UsableRulesProof (⇔, 0 ms)
↳18 PiDP
↳19 PiDPToQDPProof (⇒, 0 ms)
↳20 QDP
↳21 QDPSizeChangeProof (⇔, 0 ms)
↳22 YES
↳23 PiDP
↳24 UsableRulesProof (⇔, 0 ms)
↳25 PiDP
↳26 PiDPToQDPProof (⇒, 0 ms)
↳27 QDP
↳28 QDPSizeChangeProof (⇔, 0 ms)
↳29 YES
mmultiply_in_gga([], X1, []) → mmultiply_out_gga([], X1, [])
mmultiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U1_gga(V0, Rest, V1, Result, Others, mmultiply_in_gga(Rest, V1, Others))
U1_gga(V0, Rest, V1, Result, Others, mmultiply_out_gga(Rest, V1, Others)) → U2_gga(V0, Rest, V1, Result, Others, multiply_in_gga(V1, V0, Result))
multiply_in_gga([], X2, []) → multiply_out_gga([], X2, [])
multiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U3_gga(V0, Rest, V1, Result, Others, multiply_in_gga(Rest, V1, Others))
U3_gga(V0, Rest, V1, Result, Others, multiply_out_gga(Rest, V1, Others)) → U4_gga(V0, Rest, V1, Result, Others, vmul_in_gga(V0, V1, Result))
vmul_in_gga([], [], 0) → vmul_out_gga([], [], 0)
vmul_in_gga(.(H1, T1), .(H2, T2), Result) → U5_gga(H1, T1, H2, T2, Result, vmul_in_gga(T1, T2, Newresult))
U5_gga(H1, T1, H2, T2, Result, vmul_out_gga(T1, T2, Newresult)) → U6_gga(H1, T1, H2, T2, Result, Newresult, is_in_ag(Product, *(H1, H2)))
is_in_ag(X0, X1) → is_out_ag(X0, X1)
U6_gga(H1, T1, H2, T2, Result, Newresult, is_out_ag(Product, *(H1, H2))) → U7_gga(H1, T1, H2, T2, Result, is_in_aa(Result, +(Product, Newresult)))
is_in_aa(X0, X1) → is_out_aa(X0, X1)
U7_gga(H1, T1, H2, T2, Result, is_out_aa(Result, +(Product, Newresult))) → vmul_out_gga(.(H1, T1), .(H2, T2), Result)
U4_gga(V0, Rest, V1, Result, Others, vmul_out_gga(V0, V1, Result)) → multiply_out_gga(.(V0, Rest), V1, .(Result, Others))
U2_gga(V0, Rest, V1, Result, Others, multiply_out_gga(V1, V0, Result)) → mmultiply_out_gga(.(V0, Rest), V1, .(Result, Others))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
mmultiply_in_gga([], X1, []) → mmultiply_out_gga([], X1, [])
mmultiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U1_gga(V0, Rest, V1, Result, Others, mmultiply_in_gga(Rest, V1, Others))
U1_gga(V0, Rest, V1, Result, Others, mmultiply_out_gga(Rest, V1, Others)) → U2_gga(V0, Rest, V1, Result, Others, multiply_in_gga(V1, V0, Result))
multiply_in_gga([], X2, []) → multiply_out_gga([], X2, [])
multiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U3_gga(V0, Rest, V1, Result, Others, multiply_in_gga(Rest, V1, Others))
U3_gga(V0, Rest, V1, Result, Others, multiply_out_gga(Rest, V1, Others)) → U4_gga(V0, Rest, V1, Result, Others, vmul_in_gga(V0, V1, Result))
vmul_in_gga([], [], 0) → vmul_out_gga([], [], 0)
vmul_in_gga(.(H1, T1), .(H2, T2), Result) → U5_gga(H1, T1, H2, T2, Result, vmul_in_gga(T1, T2, Newresult))
U5_gga(H1, T1, H2, T2, Result, vmul_out_gga(T1, T2, Newresult)) → U6_gga(H1, T1, H2, T2, Result, Newresult, is_in_ag(Product, *(H1, H2)))
is_in_ag(X0, X1) → is_out_ag(X0, X1)
U6_gga(H1, T1, H2, T2, Result, Newresult, is_out_ag(Product, *(H1, H2))) → U7_gga(H1, T1, H2, T2, Result, is_in_aa(Result, +(Product, Newresult)))
is_in_aa(X0, X1) → is_out_aa(X0, X1)
U7_gga(H1, T1, H2, T2, Result, is_out_aa(Result, +(Product, Newresult))) → vmul_out_gga(.(H1, T1), .(H2, T2), Result)
U4_gga(V0, Rest, V1, Result, Others, vmul_out_gga(V0, V1, Result)) → multiply_out_gga(.(V0, Rest), V1, .(Result, Others))
U2_gga(V0, Rest, V1, Result, Others, multiply_out_gga(V1, V0, Result)) → mmultiply_out_gga(.(V0, Rest), V1, .(Result, Others))
MMULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → U1_GGA(V0, Rest, V1, Result, Others, mmultiply_in_gga(Rest, V1, Others))
MMULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → MMULTIPLY_IN_GGA(Rest, V1, Others)
U1_GGA(V0, Rest, V1, Result, Others, mmultiply_out_gga(Rest, V1, Others)) → U2_GGA(V0, Rest, V1, Result, Others, multiply_in_gga(V1, V0, Result))
U1_GGA(V0, Rest, V1, Result, Others, mmultiply_out_gga(Rest, V1, Others)) → MULTIPLY_IN_GGA(V1, V0, Result)
MULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → U3_GGA(V0, Rest, V1, Result, Others, multiply_in_gga(Rest, V1, Others))
MULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → MULTIPLY_IN_GGA(Rest, V1, Others)
U3_GGA(V0, Rest, V1, Result, Others, multiply_out_gga(Rest, V1, Others)) → U4_GGA(V0, Rest, V1, Result, Others, vmul_in_gga(V0, V1, Result))
U3_GGA(V0, Rest, V1, Result, Others, multiply_out_gga(Rest, V1, Others)) → VMUL_IN_GGA(V0, V1, Result)
VMUL_IN_GGA(.(H1, T1), .(H2, T2), Result) → U5_GGA(H1, T1, H2, T2, Result, vmul_in_gga(T1, T2, Newresult))
VMUL_IN_GGA(.(H1, T1), .(H2, T2), Result) → VMUL_IN_GGA(T1, T2, Newresult)
U5_GGA(H1, T1, H2, T2, Result, vmul_out_gga(T1, T2, Newresult)) → U6_GGA(H1, T1, H2, T2, Result, Newresult, is_in_ag(Product, *(H1, H2)))
U5_GGA(H1, T1, H2, T2, Result, vmul_out_gga(T1, T2, Newresult)) → IS_IN_AG(Product, *(H1, H2))
U6_GGA(H1, T1, H2, T2, Result, Newresult, is_out_ag(Product, *(H1, H2))) → U7_GGA(H1, T1, H2, T2, Result, is_in_aa(Result, +(Product, Newresult)))
U6_GGA(H1, T1, H2, T2, Result, Newresult, is_out_ag(Product, *(H1, H2))) → IS_IN_AA(Result, +(Product, Newresult))
mmultiply_in_gga([], X1, []) → mmultiply_out_gga([], X1, [])
mmultiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U1_gga(V0, Rest, V1, Result, Others, mmultiply_in_gga(Rest, V1, Others))
U1_gga(V0, Rest, V1, Result, Others, mmultiply_out_gga(Rest, V1, Others)) → U2_gga(V0, Rest, V1, Result, Others, multiply_in_gga(V1, V0, Result))
multiply_in_gga([], X2, []) → multiply_out_gga([], X2, [])
multiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U3_gga(V0, Rest, V1, Result, Others, multiply_in_gga(Rest, V1, Others))
U3_gga(V0, Rest, V1, Result, Others, multiply_out_gga(Rest, V1, Others)) → U4_gga(V0, Rest, V1, Result, Others, vmul_in_gga(V0, V1, Result))
vmul_in_gga([], [], 0) → vmul_out_gga([], [], 0)
vmul_in_gga(.(H1, T1), .(H2, T2), Result) → U5_gga(H1, T1, H2, T2, Result, vmul_in_gga(T1, T2, Newresult))
U5_gga(H1, T1, H2, T2, Result, vmul_out_gga(T1, T2, Newresult)) → U6_gga(H1, T1, H2, T2, Result, Newresult, is_in_ag(Product, *(H1, H2)))
is_in_ag(X0, X1) → is_out_ag(X0, X1)
U6_gga(H1, T1, H2, T2, Result, Newresult, is_out_ag(Product, *(H1, H2))) → U7_gga(H1, T1, H2, T2, Result, is_in_aa(Result, +(Product, Newresult)))
is_in_aa(X0, X1) → is_out_aa(X0, X1)
U7_gga(H1, T1, H2, T2, Result, is_out_aa(Result, +(Product, Newresult))) → vmul_out_gga(.(H1, T1), .(H2, T2), Result)
U4_gga(V0, Rest, V1, Result, Others, vmul_out_gga(V0, V1, Result)) → multiply_out_gga(.(V0, Rest), V1, .(Result, Others))
U2_gga(V0, Rest, V1, Result, Others, multiply_out_gga(V1, V0, Result)) → mmultiply_out_gga(.(V0, Rest), V1, .(Result, Others))
MMULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → U1_GGA(V0, Rest, V1, Result, Others, mmultiply_in_gga(Rest, V1, Others))
MMULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → MMULTIPLY_IN_GGA(Rest, V1, Others)
U1_GGA(V0, Rest, V1, Result, Others, mmultiply_out_gga(Rest, V1, Others)) → U2_GGA(V0, Rest, V1, Result, Others, multiply_in_gga(V1, V0, Result))
U1_GGA(V0, Rest, V1, Result, Others, mmultiply_out_gga(Rest, V1, Others)) → MULTIPLY_IN_GGA(V1, V0, Result)
MULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → U3_GGA(V0, Rest, V1, Result, Others, multiply_in_gga(Rest, V1, Others))
MULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → MULTIPLY_IN_GGA(Rest, V1, Others)
U3_GGA(V0, Rest, V1, Result, Others, multiply_out_gga(Rest, V1, Others)) → U4_GGA(V0, Rest, V1, Result, Others, vmul_in_gga(V0, V1, Result))
U3_GGA(V0, Rest, V1, Result, Others, multiply_out_gga(Rest, V1, Others)) → VMUL_IN_GGA(V0, V1, Result)
VMUL_IN_GGA(.(H1, T1), .(H2, T2), Result) → U5_GGA(H1, T1, H2, T2, Result, vmul_in_gga(T1, T2, Newresult))
VMUL_IN_GGA(.(H1, T1), .(H2, T2), Result) → VMUL_IN_GGA(T1, T2, Newresult)
U5_GGA(H1, T1, H2, T2, Result, vmul_out_gga(T1, T2, Newresult)) → U6_GGA(H1, T1, H2, T2, Result, Newresult, is_in_ag(Product, *(H1, H2)))
U5_GGA(H1, T1, H2, T2, Result, vmul_out_gga(T1, T2, Newresult)) → IS_IN_AG(Product, *(H1, H2))
U6_GGA(H1, T1, H2, T2, Result, Newresult, is_out_ag(Product, *(H1, H2))) → U7_GGA(H1, T1, H2, T2, Result, is_in_aa(Result, +(Product, Newresult)))
U6_GGA(H1, T1, H2, T2, Result, Newresult, is_out_ag(Product, *(H1, H2))) → IS_IN_AA(Result, +(Product, Newresult))
mmultiply_in_gga([], X1, []) → mmultiply_out_gga([], X1, [])
mmultiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U1_gga(V0, Rest, V1, Result, Others, mmultiply_in_gga(Rest, V1, Others))
U1_gga(V0, Rest, V1, Result, Others, mmultiply_out_gga(Rest, V1, Others)) → U2_gga(V0, Rest, V1, Result, Others, multiply_in_gga(V1, V0, Result))
multiply_in_gga([], X2, []) → multiply_out_gga([], X2, [])
multiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U3_gga(V0, Rest, V1, Result, Others, multiply_in_gga(Rest, V1, Others))
U3_gga(V0, Rest, V1, Result, Others, multiply_out_gga(Rest, V1, Others)) → U4_gga(V0, Rest, V1, Result, Others, vmul_in_gga(V0, V1, Result))
vmul_in_gga([], [], 0) → vmul_out_gga([], [], 0)
vmul_in_gga(.(H1, T1), .(H2, T2), Result) → U5_gga(H1, T1, H2, T2, Result, vmul_in_gga(T1, T2, Newresult))
U5_gga(H1, T1, H2, T2, Result, vmul_out_gga(T1, T2, Newresult)) → U6_gga(H1, T1, H2, T2, Result, Newresult, is_in_ag(Product, *(H1, H2)))
is_in_ag(X0, X1) → is_out_ag(X0, X1)
U6_gga(H1, T1, H2, T2, Result, Newresult, is_out_ag(Product, *(H1, H2))) → U7_gga(H1, T1, H2, T2, Result, is_in_aa(Result, +(Product, Newresult)))
is_in_aa(X0, X1) → is_out_aa(X0, X1)
U7_gga(H1, T1, H2, T2, Result, is_out_aa(Result, +(Product, Newresult))) → vmul_out_gga(.(H1, T1), .(H2, T2), Result)
U4_gga(V0, Rest, V1, Result, Others, vmul_out_gga(V0, V1, Result)) → multiply_out_gga(.(V0, Rest), V1, .(Result, Others))
U2_gga(V0, Rest, V1, Result, Others, multiply_out_gga(V1, V0, Result)) → mmultiply_out_gga(.(V0, Rest), V1, .(Result, Others))
VMUL_IN_GGA(.(H1, T1), .(H2, T2), Result) → VMUL_IN_GGA(T1, T2, Newresult)
mmultiply_in_gga([], X1, []) → mmultiply_out_gga([], X1, [])
mmultiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U1_gga(V0, Rest, V1, Result, Others, mmultiply_in_gga(Rest, V1, Others))
U1_gga(V0, Rest, V1, Result, Others, mmultiply_out_gga(Rest, V1, Others)) → U2_gga(V0, Rest, V1, Result, Others, multiply_in_gga(V1, V0, Result))
multiply_in_gga([], X2, []) → multiply_out_gga([], X2, [])
multiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U3_gga(V0, Rest, V1, Result, Others, multiply_in_gga(Rest, V1, Others))
U3_gga(V0, Rest, V1, Result, Others, multiply_out_gga(Rest, V1, Others)) → U4_gga(V0, Rest, V1, Result, Others, vmul_in_gga(V0, V1, Result))
vmul_in_gga([], [], 0) → vmul_out_gga([], [], 0)
vmul_in_gga(.(H1, T1), .(H2, T2), Result) → U5_gga(H1, T1, H2, T2, Result, vmul_in_gga(T1, T2, Newresult))
U5_gga(H1, T1, H2, T2, Result, vmul_out_gga(T1, T2, Newresult)) → U6_gga(H1, T1, H2, T2, Result, Newresult, is_in_ag(Product, *(H1, H2)))
is_in_ag(X0, X1) → is_out_ag(X0, X1)
U6_gga(H1, T1, H2, T2, Result, Newresult, is_out_ag(Product, *(H1, H2))) → U7_gga(H1, T1, H2, T2, Result, is_in_aa(Result, +(Product, Newresult)))
is_in_aa(X0, X1) → is_out_aa(X0, X1)
U7_gga(H1, T1, H2, T2, Result, is_out_aa(Result, +(Product, Newresult))) → vmul_out_gga(.(H1, T1), .(H2, T2), Result)
U4_gga(V0, Rest, V1, Result, Others, vmul_out_gga(V0, V1, Result)) → multiply_out_gga(.(V0, Rest), V1, .(Result, Others))
U2_gga(V0, Rest, V1, Result, Others, multiply_out_gga(V1, V0, Result)) → mmultiply_out_gga(.(V0, Rest), V1, .(Result, Others))
VMUL_IN_GGA(.(H1, T1), .(H2, T2), Result) → VMUL_IN_GGA(T1, T2, Newresult)
VMUL_IN_GGA(.(H1, T1), .(H2, T2)) → VMUL_IN_GGA(T1, T2)
From the DPs we obtained the following set of size-change graphs:
MULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → MULTIPLY_IN_GGA(Rest, V1, Others)
mmultiply_in_gga([], X1, []) → mmultiply_out_gga([], X1, [])
mmultiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U1_gga(V0, Rest, V1, Result, Others, mmultiply_in_gga(Rest, V1, Others))
U1_gga(V0, Rest, V1, Result, Others, mmultiply_out_gga(Rest, V1, Others)) → U2_gga(V0, Rest, V1, Result, Others, multiply_in_gga(V1, V0, Result))
multiply_in_gga([], X2, []) → multiply_out_gga([], X2, [])
multiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U3_gga(V0, Rest, V1, Result, Others, multiply_in_gga(Rest, V1, Others))
U3_gga(V0, Rest, V1, Result, Others, multiply_out_gga(Rest, V1, Others)) → U4_gga(V0, Rest, V1, Result, Others, vmul_in_gga(V0, V1, Result))
vmul_in_gga([], [], 0) → vmul_out_gga([], [], 0)
vmul_in_gga(.(H1, T1), .(H2, T2), Result) → U5_gga(H1, T1, H2, T2, Result, vmul_in_gga(T1, T2, Newresult))
U5_gga(H1, T1, H2, T2, Result, vmul_out_gga(T1, T2, Newresult)) → U6_gga(H1, T1, H2, T2, Result, Newresult, is_in_ag(Product, *(H1, H2)))
is_in_ag(X0, X1) → is_out_ag(X0, X1)
U6_gga(H1, T1, H2, T2, Result, Newresult, is_out_ag(Product, *(H1, H2))) → U7_gga(H1, T1, H2, T2, Result, is_in_aa(Result, +(Product, Newresult)))
is_in_aa(X0, X1) → is_out_aa(X0, X1)
U7_gga(H1, T1, H2, T2, Result, is_out_aa(Result, +(Product, Newresult))) → vmul_out_gga(.(H1, T1), .(H2, T2), Result)
U4_gga(V0, Rest, V1, Result, Others, vmul_out_gga(V0, V1, Result)) → multiply_out_gga(.(V0, Rest), V1, .(Result, Others))
U2_gga(V0, Rest, V1, Result, Others, multiply_out_gga(V1, V0, Result)) → mmultiply_out_gga(.(V0, Rest), V1, .(Result, Others))
MULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → MULTIPLY_IN_GGA(Rest, V1, Others)
MULTIPLY_IN_GGA(.(V0, Rest), V1) → MULTIPLY_IN_GGA(Rest, V1)
From the DPs we obtained the following set of size-change graphs:
MMULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → MMULTIPLY_IN_GGA(Rest, V1, Others)
mmultiply_in_gga([], X1, []) → mmultiply_out_gga([], X1, [])
mmultiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U1_gga(V0, Rest, V1, Result, Others, mmultiply_in_gga(Rest, V1, Others))
U1_gga(V0, Rest, V1, Result, Others, mmultiply_out_gga(Rest, V1, Others)) → U2_gga(V0, Rest, V1, Result, Others, multiply_in_gga(V1, V0, Result))
multiply_in_gga([], X2, []) → multiply_out_gga([], X2, [])
multiply_in_gga(.(V0, Rest), V1, .(Result, Others)) → U3_gga(V0, Rest, V1, Result, Others, multiply_in_gga(Rest, V1, Others))
U3_gga(V0, Rest, V1, Result, Others, multiply_out_gga(Rest, V1, Others)) → U4_gga(V0, Rest, V1, Result, Others, vmul_in_gga(V0, V1, Result))
vmul_in_gga([], [], 0) → vmul_out_gga([], [], 0)
vmul_in_gga(.(H1, T1), .(H2, T2), Result) → U5_gga(H1, T1, H2, T2, Result, vmul_in_gga(T1, T2, Newresult))
U5_gga(H1, T1, H2, T2, Result, vmul_out_gga(T1, T2, Newresult)) → U6_gga(H1, T1, H2, T2, Result, Newresult, is_in_ag(Product, *(H1, H2)))
is_in_ag(X0, X1) → is_out_ag(X0, X1)
U6_gga(H1, T1, H2, T2, Result, Newresult, is_out_ag(Product, *(H1, H2))) → U7_gga(H1, T1, H2, T2, Result, is_in_aa(Result, +(Product, Newresult)))
is_in_aa(X0, X1) → is_out_aa(X0, X1)
U7_gga(H1, T1, H2, T2, Result, is_out_aa(Result, +(Product, Newresult))) → vmul_out_gga(.(H1, T1), .(H2, T2), Result)
U4_gga(V0, Rest, V1, Result, Others, vmul_out_gga(V0, V1, Result)) → multiply_out_gga(.(V0, Rest), V1, .(Result, Others))
U2_gga(V0, Rest, V1, Result, Others, multiply_out_gga(V1, V0, Result)) → mmultiply_out_gga(.(V0, Rest), V1, .(Result, Others))
MMULTIPLY_IN_GGA(.(V0, Rest), V1, .(Result, Others)) → MMULTIPLY_IN_GGA(Rest, V1, Others)
MMULTIPLY_IN_GGA(.(V0, Rest), V1) → MMULTIPLY_IN_GGA(Rest, V1)
From the DPs we obtained the following set of size-change graphs: